curl --request POST \ --url https://api.evermind.ai/api/v2/memory/context \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "user_id": "user-1", "query": "What did I decide about the Q3 budget after the meeting with Alice?", "top_k": 10, "include_profile": true}'
import requests
url = "https://api.evermind.ai/api/v2/memory/context"
payload = {
"user_id": "user-1",
"query": "What did I decide about the Q3 budget after the meeting with Alice?",
"top_k": 10,
"include_profile": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
user_id: 'user-1',
query: 'What did I decide about the Q3 budget after the meeting with Alice?',
top_k: 10,
include_profile: true
})
};
fetch('https://api.evermind.ai/api/v2/memory/context', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evermind.ai/api/v2/memory/context"
payload := strings.NewReader("{\n \"user_id\": \"user-1\",\n \"query\": \"What did I decide about the Q3 budget after the meeting with Alice?\",\n \"top_k\": 10,\n \"include_profile\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.post("https://api.evermind.ai/api/v2/memory/context")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"user_id\": \"user-1\",\n \"query\": \"What did I decide about the Q3 budget after the meeting with Alice?\",\n \"top_k\": 10,\n \"include_profile\": true\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.evermind.ai/api/v2/memory/context")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"user_id\": \"user-1\",\n \"query\": \"What did I decide about the Q3 budget after the meeting with Alice?\",\n \"top_k\": 10,\n \"include_profile\": true\n}"
response = http.request(request)
puts response.read_body
Retrieve memories with a multi-round, LLM-driven search loop.
An LLM plans and runs several searches over the owner’s memories (keyword, semantic, hybrid, topic cluster, and reading the surrounding conversation or a whole session), looks at what came back, and searches again with new queries until it judges the evidence sufficient to answer query. The episodes it found are returned. The response contains memories, not an answer: the model’s own answer is discarded.
Use it for questions a single search answers poorly: multi-hop, temporal, or spread across several conversations. For simple lookups, /api/v2/memory/search is faster and cheaper.
Request: the same body as /api/v2/memory/search, except that method is fixed to “context” (any other value is a 422) and min_score is not supported (422).
Response: the same SearchData shape as /api/v2/memory/search.
Episodes come back for a user_id owner only. For an agent_id owner, episodes, agent_cases and agent_skills are empty.
profiles (with include_profile) and unprocessed_messages (with a top-level session_id filter) are filled exactly as on search.
episodes[].cited is true for the episodes the model named as the ones its answer rested on.
episodes[].score is a rank-fusion score, roughly 0.01 to 0.05, plus 1.0 for a cited episode. It is not comparable with search scores.
Limits: by default at most 5 LLM rounds and 45 seconds per request. Reaching a limit is not an error: the episodes found so far are returned. Set your client timeout to at least 60 seconds.
POST
/
api
/
v2
/
memory
/
context
Context Retrieval [Cloud-only]
curl --request POST \ --url https://api.evermind.ai/api/v2/memory/context \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "user_id": "user-1", "query": "What did I decide about the Q3 budget after the meeting with Alice?", "top_k": 10, "include_profile": true}'
import requests
url = "https://api.evermind.ai/api/v2/memory/context"
payload = {
"user_id": "user-1",
"query": "What did I decide about the Q3 budget after the meeting with Alice?",
"top_k": 10,
"include_profile": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
user_id: 'user-1',
query: 'What did I decide about the Q3 budget after the meeting with Alice?',
top_k: 10,
include_profile: true
})
};
fetch('https://api.evermind.ai/api/v2/memory/context', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evermind.ai/api/v2/memory/context"
payload := strings.NewReader("{\n \"user_id\": \"user-1\",\n \"query\": \"What did I decide about the Q3 budget after the meeting with Alice?\",\n \"top_k\": 10,\n \"include_profile\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.post("https://api.evermind.ai/api/v2/memory/context")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"user_id\": \"user-1\",\n \"query\": \"What did I decide about the Q3 budget after the meeting with Alice?\",\n \"top_k\": 10,\n \"include_profile\": true\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.evermind.ai/api/v2/memory/context")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"user_id\": \"user-1\",\n \"query\": \"What did I decide about the Q3 budget after the meeting with Alice?\",\n \"top_k\": 10,\n \"include_profile\": true\n}"
response = http.request(request)
puts response.read_body
The question to gather evidence for. The loop keeps searching until it judges the evidence sufficient to answer it, so a full question works better than a few keywords.
Retrieve from one user's memories, matched against the messages' sender_id. Exactly one of user_id / agent_id is required; only a user owner gets episodes back.
Fixed to "context" and may be omitted. Any other value is rejected with 422: this endpoint does not switch retrieval methods, use /api/v2/memory/search for those.
Not supported here: any value is rejected with 422. Results are ranked by rank fusion over the loop's searches, not by a similarity score, so there is no floor to apply.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"EverOS","colors":{"primary":"#2DABC2","light":"#FAF9F5","dark":"#FFC53D"},"logo":{"light":"https://mintcdn.com/evermind/r7FUvGqFENzWPpQK/logo/dark.png?fit=max\u0026auto=format\u0026n=r7FUvGqFENzWPpQK\u0026q=85\u0026s=3c77717d85a2e6597b61a703fa9f18dc","dark":"https://mintcdn.com/evermind/r7FUvGqFENzWPpQK/logo/light.png?fit=max\u0026auto=format\u0026n=r7FUvGqFENzWPpQK\u0026q=85\u0026s=8edcb7078f3569fbce98154987e4c825","href":"//evermind.ai"},"favicon":"https://mintcdn.com/evermind/KH16NOZG47OFzMRe/favicon.svg?fit=max\u0026auto=format\u0026n=KH16NOZG47OFzMRe\u0026q=85\u0026s=5d3fe0e14c145627d3adc793919fc891","navbar":{"links":[{"href":"mailto:contact@evermind.ai","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://everos.evermind.ai"}},"footer":{"socials":{"x":"https://x.com/EverMindAI","github":"https://github.com/EverMind-AI/EverOS","linkedin":"https://www.linkedin.com/company/ai-evermind"}},"integrations":{"gtm":{"tagId":"GTM-WQG5VGJQ"},"posthog":{"apiKey":"phc_xzrNRpDb4XkGwtE0wb24VNJT89c47fsuEA4FibnmdnE","apiHost":"https://phc.evermind.ai"}},"banner":{"content":"EverOS API v1 retires on November 2, 2026. [See what you need to do](/api-reference/v1-sunset)","dismissible":false},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"evermind","hasAudioNarration":false,"actualSubdomain":"evermind","customDomains":["docs.evermind.ai"],"gitSource":{"type":"github","owner":"evermind-ai","repo":"everos-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adec227fbe3b12122280085","collectionId":"740fb824-c82a-49f0-9106-e81f63a20831","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adec227fbe3b12122280085"},"feedback":{"agentFeedback":true,"thumbs":true},"entitlements":{},"buildId":"6adec8aacdbe2c2cc473aa1f","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"API Reference","count":39},{"language":"default","tag":"API Reference (Cloud v1 · legacy)","count":21},{"language":"default","tag":"Knowledge Bases","count":19},{"language":"default","tag":"API Reference (OSS v1 · legacy)","count":17},{"language":"default","tag":"Memory","count":17},{"language":"default","tag":"EverOS Cloud","count":14},{"language":"default","tag":"Core Concepts","count":10},{"language":"default","tag":"Open Source","count":10},{"language":"default","tag":"Knowledge Wiki","count":9},{"language":"default","tag":"Memories","count":9}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"html:not(.dark),html:not(.dark) #body-content,html:not(.dark) #content-area,html:not(.dark) #navbar,html:not(.dark) #sidebar,html:not(.dark) #sidebar-content,html:not(.dark) #table-of-contents,html:not(.dark) aside,html:not(.dark) body,html:not(.dark) header,html:not(.dark) main,html:not(.dark) nav{background-color:#faf9f5}:not(.dark) .from-background-light{--tw-gradient-from:#FAF9F5!important}.dark .from-background-light{--tw-gradient-from:#0e0e10!important}div.mt-2.text-lg.prose{margin-top:1.5rem}"}],"page":{"pagePath":"api-reference/memory/context-retrieval-[cloud-only]","slug":"/api-reference/memory/context-retrieval-[cloud-only]","pageMetadata":{"title":"Context Retrieval [Cloud-only]","description":"Retrieve memories with a multi-round, LLM-driven search loop.\n\nAn LLM plans and runs several searches over the owner's memories (keyword, semantic, hybrid, topic cluster, and reading the surrounding conversation or a whole session), looks at what came back, and searches again with new queries until it judges the evidence sufficient to answer `query`. The episodes it found are returned. **The response contains memories, not an answer**: the model's own answer is discarded.\n\nUse it for questions a single search answers poorly: multi-hop, temporal, or spread across several conversations. For simple lookups, /api/v2/memory/search is faster and cheaper.\n\n**Request**: the same body as /api/v2/memory/search, except that `method` is fixed to \"context\" (any other value is a 422) and `min_score` is not supported (422).\n\n**Response**: the same `SearchData` shape as /api/v2/memory/search.\n- Episodes come back for a `user_id` owner only. For an `agent_id` owner, `episodes`, `agent_cases` and `agent_skills` are empty.\n- `profiles` (with `include_profile`) and `unprocessed_messages` (with a top-level `session_id` filter) are filled exactly as on search.\n- `episodes[].cited` is true for the episodes the model named as the ones its answer rested on.\n- `episodes[].score` is a rank-fusion score, roughly 0.01 to 0.05, plus 1.0 for a cited episode. It is not comparable with search scores.\n\n**Limits**: by default at most 5 LLM rounds and 45 seconds per request. Reaching a limit is not an error: the episodes found so far are returned. Set your client timeout to at least 60 seconds.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/context","href":"/api-reference/memory/context-retrieval-[cloud-only]","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Retrieve memories with a multi-round, LLM-driven search loop.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"An LLM plans and runs several searches over the owner’s memories (keyword, semantic, hybrid, topic cluster, and reading the surrounding conversation or a whole session), looks at what came back, and searches again with new queries until it judges the evidence sufficient to answer \", _jsx(_components.code, {\n children: \"query\"\n }), \". The episodes it found are returned. \", _jsx(_components.strong, {\n children: \"The response contains memories, not an answer\"\n }), \": the model’s own answer is discarded.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Use it for questions a single search answers poorly: multi-hop, temporal, or spread across several conversations. For simple lookups, /api/v2/memory/search is faster and cheaper.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Request\"\n }), \": the same body as /api/v2/memory/search, except that \", _jsx(_components.code, {\n children: \"method\"\n }), \" is fixed to “context” (any other value is a 422) and \", _jsx(_components.code, {\n children: \"min_score\"\n }), \" is not supported (422).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Response\"\n }), \": the same \", _jsx(_components.code, {\n children: \"SearchData\"\n }), \" shape as /api/v2/memory/search.\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Episodes come back for a \", _jsx(_components.code, {\n children: \"user_id\"\n }), \" owner only. For an \", _jsx(_components.code, {\n children: \"agent_id\"\n }), \" owner, \", _jsx(_components.code, {\n children: \"episodes\"\n }), \", \", _jsx(_components.code, {\n children: \"agent_cases\"\n }), \" and \", _jsx(_components.code, {\n children: \"agent_skills\"\n }), \" are empty.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"profiles\"\n }), \" (with \", _jsx(_components.code, {\n children: \"include_profile\"\n }), \") and \", _jsx(_components.code, {\n children: \"unprocessed_messages\"\n }), \" (with a top-level \", _jsx(_components.code, {\n children: \"session_id\"\n }), \" filter) are filled exactly as on search.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"episodes[].cited\"\n }), \" is true for the episodes the model named as the ones its answer rested on.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"episodes[].score\"\n }), \" is a rank-fusion score, roughly 0.01 to 0.05, plus 1.0 for a cited episode. It is not comparable with search scores.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Limits\"\n }), \": by default at most 5 LLM rounds and 45 seconds per request. Reaching a limit is not an error: the episodes found so far are returned. Set your client timeout to at least 60 seconds.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Context Retrieval [Cloud-only]","description":"Retrieve memories with a multi-round, LLM-driven search loop.\n\nAn LLM plans and runs several searches over the owner's memories (keyword, semantic, hybrid, topic cluster, and reading the surrounding conversation or a whole session), looks at what came back, and searches again with new queries until it judges the evidence sufficient to answer `query`. The episodes it found are returned. **The response contains memories, not an answer**: the model's own answer is discarded.\n\nUse it for questions a single search answers poorly: multi-hop, temporal, or spread across several conversations. For simple lookups, /api/v2/memory/search is faster and cheaper.\n\n**Request**: the same body as /api/v2/memory/search, except that `method` is fixed to \"context\" (any other value is a 422) and `min_score` is not supported (422).\n\n**Response**: the same `SearchData` shape as /api/v2/memory/search.\n- Episodes come back for a `user_id` owner only. For an `agent_id` owner, `episodes`, `agent_cases` and `agent_skills` are empty.\n- `profiles` (with `include_profile`) and `unprocessed_messages` (with a top-level `session_id` filter) are filled exactly as on search.\n- `episodes[].cited` is true for the episodes the model named as the ones its answer rested on.\n- `episodes[].score` is a rank-fusion score, roughly 0.01 to 0.05, plus 1.0 for a cited episode. It is not comparable with search scores.\n\n**Limits**: by default at most 5 LLM rounds and 45 seconds per request. Reaching a limit is not an error: the episodes found so far are returned. Set your client timeout to at least 60 seconds.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/context","href":"/api-reference/memory/context-retrieval-[cloud-only]","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Memory"],"summary":"Context Retrieval [Cloud-only]","operationId":"retrieveContext","requestBody":"853b3a93-a0de-4d79-a3f4-601d0a4e9f0a","responses":{"200":"0791227d-17dc-4b2d-9d15-b1a2292a8a95","401":"d56d2fe8-ef12-4188-a8dc-ff80e5973095","403":"787b7b1a-ea3d-426b-8be7-1dda2c3950aa","422":"b358ed5f-7733-4f0a-ae8c-593f0ff4d9f1","429":"5120833f-f1f0-4f8a-b795-5b3dca25f086","503":"da5c29bb-fa40-49a4-927d-a6d36a59f08a"},"description":"Retrieve memories with a multi-round, LLM-driven search loop.\n\nAn LLM plans and runs several searches over the owner's memories (keyword, semantic, hybrid, topic cluster, and reading the surrounding conversation or a whole session), looks at what came back, and searches again with new queries until it judges the evidence sufficient to answer `query`. The episodes it found are returned. **The response contains memories, not an answer**: the model's own answer is discarded.\n\nUse it for questions a single search answers poorly: multi-hop, temporal, or spread across several conversations. For simple lookups, /api/v2/memory/search is faster and cheaper.\n\n**Request**: the same body as /api/v2/memory/search, except that `method` is fixed to \"context\" (any other value is a 422) and `min_score` is not supported (422).\n\n**Response**: the same `SearchData` shape as /api/v2/memory/search.\n- Episodes come back for a `user_id` owner only. For an `agent_id` owner, `episodes`, `agent_cases` and `agent_skills` are empty.\n- `profiles` (with `include_profile`) and `unprocessed_messages` (with a top-level `session_id` filter) are filled exactly as on search.\n- `episodes[].cited` is true for the episodes the model named as the ones its answer rested on.\n- `episodes[].score` is a rank-fusion score, roughly 0.01 to 0.05, plus 1.0 for a cited episode. It is not comparable with search scores.\n\n**Limits**: by default at most 5 LLM rounds and 45 seconds per request. Reaching a limit is not an error: the episodes found so far are returned. Set your client timeout to at least 60 seconds.","method":"post","type":"path","servers":["6755bf3f-8ce6-4610-8f69-e9440a578770"],"security":["903c48f7-e2df-45e0-bf1e-f020d6c26b61"],"path":"/api/v2/memory/context","baseUrlOptions":["https://api.evermind.ai"],"title":"Context Retrieval [Cloud-only]","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"properties":{"query":{"type":"string","minLength":1,"title":"Query","description":"The question to gather evidence for. The loop keeps searching until it judges the evidence sufficient to answer it, so a full question works better than a few keywords.","isRequired":true,"uniqueKey":"query","typeLabel":"string"},"app_id":{"type":"string","maxLength":128,"title":"App Id","default":"default","description":"Scope to search in, defaulting to \"default\". Must match the pair used on write.","uniqueKey":"app_id","typeLabel":"string"},"project_id":{"type":"string","maxLength":128,"title":"Project Id","default":"default","description":"Second half of the scope, defaulting to \"default\".","uniqueKey":"project_id","typeLabel":"string"},"user_id":{"oneOf":[{"type":"string","title":"User Id","description":"Retrieve from one user's memories, matched against the messages' `sender_id`. Exactly one of `user_id` / `agent_id` is required; only a user owner gets episodes back.","maxLength":256,"minLength":1,"uniqueKey":"user_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"User Id","description":"Retrieve from one user's memories, matched against the messages' `sender_id`. Exactly one of `user_id` / `agent_id` is required; only a user owner gets episodes back.","uniqueKey":"user_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"user_id","typeLabel":"string | null"},"agent_id":{"oneOf":[{"type":"string","title":"Agent Id","description":"Accepted, but an agent owner gets no episodes, cases or skills back from this endpoint. Exactly one of `user_id` / `agent_id` is required.","maxLength":256,"minLength":1,"uniqueKey":"agent_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Agent Id","description":"Accepted, but an agent owner gets no episodes, cases or skills back from this endpoint. Exactly one of `user_id` / `agent_id` is required.","uniqueKey":"agent_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent_id","typeLabel":"string | null"},"method":{"type":"string","const":"context","title":"Method","default":"context","description":"Fixed to \"context\" and may be omitted. Any other value is rejected with 422: this endpoint does not switch retrieval methods, use /api/v2/memory/search for those.","uniqueKey":"method","typeLabel":"string"},"top_k":{"type":"integer","title":"Top K","default":-1,"description":"Maximum number of episodes returned. Either -1 (the default, letting the engine decide) or a value from 1 to 100; anything else is rejected with 422.","uniqueKey":"top_k","typeLabel":"integer"},"radius":{"oneOf":[{"type":"number","title":"Radius","description":"Accepted for compatibility with the search request and ignored: the loop runs its own searches.","maximum":1,"minimum":0,"uniqueKey":"radius.oneOf.0","typeLabel":"number"},{"type":"null","title":"Radius","description":"Accepted for compatibility with the search request and ignored: the loop runs its own searches.","uniqueKey":"radius.oneOf.1","typeLabel":"null"}],"uniqueKey":"radius","typeLabel":"number | null"},"min_score":{"oneOf":[{"type":"number","title":"Min Score","description":"Not supported here: any value is rejected with 422. Results are ranked by rank fusion over the loop's searches, not by a similarity score, so there is no floor to apply.","maximum":1,"minimum":0,"uniqueKey":"min_score.oneOf.0","typeLabel":"number"},{"type":"null","title":"Min Score","description":"Not supported here: any value is rejected with 422. Results are ranked by rank fusion over the loop's searches, not by a similarity score, so there is no floor to apply.","uniqueKey":"min_score.oneOf.1","typeLabel":"null"}],"uniqueKey":"min_score","typeLabel":"number | null"},"include_profile":{"type":"boolean","title":"Include Profile","default":false,"description":"Also return the user's profile alongside the hits, saving a second call. Ignored for an agent owner, whose results carry no profiles.","uniqueKey":"include_profile","typeLabel":"boolean"},"enable_llm_rerank":{"type":"boolean","title":"Enable Llm Rerank","default":false,"description":"Accepted for compatibility with the search request and ignored: this endpoint returns no agent cases or skills.","uniqueKey":"enable_llm_rerank","typeLabel":"boolean"},"filters":{"oneOf":[{"type":"object","title":"FilterNode","description":"Optional filter tree — recursive `AND` / `OR` arrays mixed with the scalar conditions being matched.","properties":{"AND":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"filters.oneOf.0.AND.oneOf.0.items.[INDEX]","typeLabel":"any"},"title":"And","description":"Nested conditions that must all hold.","uniqueKey":"filters.oneOf.0.AND.oneOf.0","typeLabel":"any[]"},{"type":"null","title":"And","description":"Nested conditions that must all hold.","uniqueKey":"filters.oneOf.0.AND.oneOf.1","typeLabel":"null"}],"uniqueKey":"filters.oneOf.0.AND","typeLabel":"any[] | null"},"OR":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"filters.oneOf.0.OR.oneOf.0.items.[INDEX]","typeLabel":"any"},"title":"Or","description":"Nested conditions of which at least one must hold.","uniqueKey":"filters.oneOf.0.OR.oneOf.0","typeLabel":"any[]"},{"type":"null","title":"Or","description":"Nested conditions of which at least one must hold.","uniqueKey":"filters.oneOf.0.OR.oneOf.1","typeLabel":"null"}],"uniqueKey":"filters.oneOf.0.OR","typeLabel":"any[] | null"}},"additionalProperties":true,"uniqueKey":"filters.oneOf.0","typeLabel":"FilterNode · object"},{"type":"null","description":"Optional filter tree — recursive `AND` / `OR` arrays mixed with the scalar conditions being matched.","uniqueKey":"filters.oneOf.1","typeLabel":"null"}],"uniqueKey":"filters","typeLabel":"FilterNode · object | null"}},"additionalProperties":false,"type":"object","required":["query"],"title":"ContextInput","example":{"user_id":"user-1","query":"What did I decide about the Q3 budget after the meeting with Alice?","top_k":10,"include_profile":true},"uniqueKey":"","typeLabel":"ContextInput · object"},"examples":{"Example":{"title":"Example","value":{"user_id":"user-1","query":"What did I decide about the Q3 budget after the meeting with Alice?","top_k":10,"include_profile":true}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"0791227d-17dc-4b2d-9d15-b1a2292a8a95":{"description":"The episodes the loop found, in the same `SearchData` shape as /api/v2/memory/search.","content":{"application/json":{"schema":{"properties":{"request_id":{"type":"string","title":"Request Id","description":"Request trace id (peer to data)","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"data":{"properties":{"episodes":{"items":{"properties":{"id":{"type":"string","title":"Id","description":"Episode id. Use it to bind tags or to fetch this episode again.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].id","typeLabel":"string"},"app_id":{"type":"string","title":"App Id","description":"The business-semantic scope this memory was written under.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].app_id","typeLabel":"string"},"project_id":{"type":"string","title":"Project Id","description":"Second half of that scope.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].project_id","typeLabel":"string"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"When the remembered exchange happened (ISO 8601), not when it was extracted.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].timestamp","typeLabel":"string\u003cdate-time>"},"summary":{"type":"string","title":"Summary","description":"Short summary of the episode — what a result list should show.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].summary","typeLabel":"string"},"subject":{"type":"string","title":"Subject","description":"What the episode is about, in a few words.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].subject","typeLabel":"string"},"episode":{"type":"string","title":"Episode","description":"The episode's stored narrative body. This is the indexed, searchable text.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].episode","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"How the episode was produced — \"Conversation\" or \"AgentConversation\".","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].type","typeLabel":"string"},"score":{"type":"number","title":"Score","description":"Relevance of this episode to the query. What the number means depends on `method`: the hybrid path fuses its two routes into a probability in 0.0–1.0 (which is what `min_score` filters on), while keyword and vector pass the underlying engine's own score through — BM25 has no upper bound and vector similarity depends on the metric. So compare scores within one method, not across methods. On /api/v2/memory/context the score is a rank-fusion score instead (roughly 0.01 to 0.05, plus 1.0 for a `cited` episode, so cited episodes come first); it is not comparable with /api/v2/memory/search scores.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].score","typeLabel":"number"},"user_id":{"oneOf":[{"type":"string","title":"User Id","description":"The user this episode belongs to. Null on an episode merged from several owners.","uniqueKey":"data.episodes.items.[INDEX].user_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"User Id","description":"The user this episode belongs to. Null on an episode merged from several owners.","uniqueKey":"data.episodes.items.[INDEX].user_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.episodes.items.[INDEX].user_id","typeLabel":"string | null"},"session_id":{"oneOf":[{"type":"string","title":"Session Id","description":"The session it was extracted from. Null when the episode merges more than one session.","uniqueKey":"data.episodes.items.[INDEX].session_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Session Id","description":"The session it was extracted from. Null when the episode merges more than one session.","uniqueKey":"data.episodes.items.[INDEX].session_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.episodes.items.[INDEX].session_id","typeLabel":"string | null"},"sender_ids":{"items":{"type":"string","uniqueKey":"data.episodes.items.[INDEX].sender_ids.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Sender Ids","description":"The senders that appear in the source exchange.","uniqueKey":"data.episodes.items.[INDEX].sender_ids","typeLabel":"string[]"},"atomic_facts":{"items":{"properties":{"id":{"type":"string","title":"Id","description":"Atomic-fact id.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].atomic_facts.items.[INDEX].id","typeLabel":"string"},"content":{"type":"string","title":"Content","description":"The fact itself, as a single statement.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].atomic_facts.items.[INDEX].content","typeLabel":"string"},"score":{"type":"number","title":"Score","description":"Relevance of this fact to the query.","isRequired":true,"uniqueKey":"data.episodes.items.[INDEX].atomic_facts.items.[INDEX].score","typeLabel":"number"}},"type":"object","required":["id","content","score"],"title":"SearchAtomicFactItem","uniqueKey":"data.episodes.items.[INDEX].atomic_facts.items.[INDEX]","typeLabel":"SearchAtomicFactItem · object"},"type":"array","title":"Atomic Facts","description":"The facts extracted from this episode, each with its own relevance score.","uniqueKey":"data.episodes.items.[INDEX].atomic_facts","typeLabel":"SearchAtomicFactItem · object[]"},"tags":{"items":{"type":"string","uniqueKey":"data.episodes.items.[INDEX].tags.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Tags","description":"Tags attached through /api/v2/memory/tag/*.","uniqueKey":"data.episodes.items.[INDEX].tags","typeLabel":"string[]"},"edited_at":{"oneOf":[{"type":"string","title":"Edited At","description":"When the memory was last edited by hand through /api/v2/memory/update. Absent on a memory that was never edited.","format":"date-time","uniqueKey":"data.episodes.items.[INDEX].edited_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Edited At","description":"When the memory was last edited by hand through /api/v2/memory/update. Absent on a memory that was never edited.","uniqueKey":"data.episodes.items.[INDEX].edited_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.episodes.items.[INDEX].edited_at","typeLabel":"string\u003cdate-time> | null"},"reflect_state":{"oneOf":[{"type":"string","title":"Reflect State","description":"Set once the narrative has been edited by hand: \"pending\" until background consolidation has absorbed the new text (a search may briefly return both it and a merged narrative close to it), \"done\" afterwards. Absent on a memory whose narrative was never edited.","enum":["pending","done"],"uniqueKey":"data.episodes.items.[INDEX].reflect_state.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reflect State","description":"Set once the narrative has been edited by hand: \"pending\" until background consolidation has absorbed the new text (a search may briefly return both it and a merged narrative close to it), \"done\" afterwards. Absent on a memory whose narrative was never edited.","uniqueKey":"data.episodes.items.[INDEX].reflect_state.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.episodes.items.[INDEX].reflect_state","typeLabel":"enum\u003cstring> | null"},"cited":{"type":"boolean","title":"Cited","default":false,"description":"/api/v2/memory/context only: the retrieval model named this episode as one its answer rested on. Always false on /api/v2/memory/search.","uniqueKey":"data.episodes.items.[INDEX].cited","typeLabel":"boolean"}},"type":"object","required":["id","app_id","project_id","timestamp","summary","subject","episode","type","score"],"title":"SearchEpisodeItem","uniqueKey":"data.episodes.items.[INDEX]","typeLabel":"SearchEpisodeItem · object"},"type":"array","title":"Episodes","description":"Matching episodes, for a user owner. Always present, empty when not applicable.","uniqueKey":"data.episodes","typeLabel":"SearchEpisodeItem · object[]"},"profiles":{"items":{"properties":{"id":{"type":"string","title":"Id","description":"Profile id.","isRequired":true,"uniqueKey":"data.profiles.items.[INDEX].id","typeLabel":"string"},"app_id":{"type":"string","title":"App Id","description":"The business-semantic scope this profile was written under.","isRequired":true,"uniqueKey":"data.profiles.items.[INDEX].app_id","typeLabel":"string"},"project_id":{"type":"string","title":"Project Id","description":"Second half of that scope.","isRequired":true,"uniqueKey":"data.profiles.items.[INDEX].project_id","typeLabel":"string"},"user_id":{"type":"string","title":"User Id","description":"The user this profile describes.","isRequired":true,"uniqueKey":"data.profiles.items.[INDEX].user_id","typeLabel":"string"},"profile_data":{"additionalProperties":true,"type":"object","title":"Profile Data","description":"The profile itself — the explicit_info and implicit_traits items maintained by extraction and by /api/v2/memory/edit. Each item's id is what an edit operation targets.","uniqueKey":"data.profiles.items.[INDEX].profile_data","typeLabel":"Profile Data · object"},"created_at":{"oneOf":[{"type":"string","title":"Created At","description":"When the profile was first created.","format":"date-time","uniqueKey":"data.profiles.items.[INDEX].created_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Created At","description":"When the profile was first created.","uniqueKey":"data.profiles.items.[INDEX].created_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.profiles.items.[INDEX].created_at","typeLabel":"string\u003cdate-time> | null"},"updated_at":{"oneOf":[{"type":"string","title":"Updated At","description":"When it last changed.","format":"date-time","uniqueKey":"data.profiles.items.[INDEX].updated_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Updated At","description":"When it last changed.","uniqueKey":"data.profiles.items.[INDEX].updated_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.profiles.items.[INDEX].updated_at","typeLabel":"string\u003cdate-time> | null"},"score":{"oneOf":[{"type":"number","title":"Score","description":"Relevance to the query. Null when the profile was returned by `include_profile` rather than matched.","uniqueKey":"data.profiles.items.[INDEX].score.oneOf.0","typeLabel":"number"},{"type":"null","title":"Score","description":"Relevance to the query. Null when the profile was returned by `include_profile` rather than matched.","uniqueKey":"data.profiles.items.[INDEX].score.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.profiles.items.[INDEX].score","typeLabel":"number | null"}},"type":"object","required":["id","app_id","project_id","user_id"],"title":"SearchProfileItem","uniqueKey":"data.profiles.items.[INDEX]","typeLabel":"SearchProfileItem · object"},"type":"array","title":"Profiles","description":"The user's profile, when `include_profile` asked for it.","uniqueKey":"data.profiles","typeLabel":"SearchProfileItem · object[]"},"agent_cases":{"items":{"properties":{"id":{"type":"string","title":"Id","description":"Agent-case id.","isRequired":true,"uniqueKey":"data.agent_cases.items.[INDEX].id","typeLabel":"string"},"app_id":{"type":"string","title":"App Id","description":"The business-semantic scope this case was written under.","isRequired":true,"uniqueKey":"data.agent_cases.items.[INDEX].app_id","typeLabel":"string"},"project_id":{"type":"string","title":"Project Id","description":"Second half of that scope.","isRequired":true,"uniqueKey":"data.agent_cases.items.[INDEX].project_id","typeLabel":"string"},"agent_id":{"type":"string","title":"Agent Id","description":"The agent that owns this case.","isRequired":true,"uniqueKey":"data.agent_cases.items.[INDEX].agent_id","typeLabel":"string"},"session_id":{"type":"string","title":"Session Id","description":"The session whose trajectory the case was distilled from.","isRequired":true,"uniqueKey":"data.agent_cases.items.[INDEX].session_id","typeLabel":"string"},"task_intent":{"type":"string","title":"Task Intent","description":"What the agent was trying to do in that trajectory.","isRequired":true,"uniqueKey":"data.agent_cases.items.[INDEX].task_intent","typeLabel":"string"},"approach":{"type":"string","title":"Approach","description":"How it went about it — the reusable part of the case.","isRequired":true,"uniqueKey":"data.agent_cases.items.[INDEX].approach","typeLabel":"string"},"quality_score":{"type":"number","title":"Quality Score","description":"How good this case is judged to be. Nominally 0.0–1.0 with 0.5 as the no-opinion default, but the value is the extractor's own and nothing on the write path enforces the range — treat an out-of-range number as possible. One threshold is real: a case scoring below 0.2 is never distilled into a skill.","isRequired":true,"uniqueKey":"data.agent_cases.items.[INDEX].quality_score","typeLabel":"number"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"When the trajectory happened (ISO 8601).","isRequired":true,"uniqueKey":"data.agent_cases.items.[INDEX].timestamp","typeLabel":"string\u003cdate-time>"},"score":{"type":"number","title":"Score","description":"Relevance of this case to the query.","isRequired":true,"uniqueKey":"data.agent_cases.items.[INDEX].score","typeLabel":"number"},"key_insight":{"oneOf":[{"type":"string","title":"Key Insight","description":"The single takeaway distilled from the trajectory, when there is one.","uniqueKey":"data.agent_cases.items.[INDEX].key_insight.oneOf.0","typeLabel":"string"},{"type":"null","title":"Key Insight","description":"The single takeaway distilled from the trajectory, when there is one.","uniqueKey":"data.agent_cases.items.[INDEX].key_insight.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.agent_cases.items.[INDEX].key_insight","typeLabel":"string | null"}},"type":"object","required":["id","app_id","project_id","agent_id","session_id","task_intent","approach","quality_score","timestamp","score"],"title":"SearchAgentCaseItem","uniqueKey":"data.agent_cases.items.[INDEX]","typeLabel":"SearchAgentCaseItem · object"},"type":"array","title":"Agent Cases","description":"Matching agent cases, for an agent owner.","uniqueKey":"data.agent_cases","typeLabel":"SearchAgentCaseItem · object[]"},"agent_skills":{"items":{"properties":{"id":{"type":"string","title":"Id","description":"Agent-skill id.","isRequired":true,"uniqueKey":"data.agent_skills.items.[INDEX].id","typeLabel":"string"},"app_id":{"type":"string","title":"App Id","description":"The business-semantic scope this skill was written under.","isRequired":true,"uniqueKey":"data.agent_skills.items.[INDEX].app_id","typeLabel":"string"},"project_id":{"type":"string","title":"Project Id","description":"Second half of that scope.","isRequired":true,"uniqueKey":"data.agent_skills.items.[INDEX].project_id","typeLabel":"string"},"agent_id":{"type":"string","title":"Agent Id","description":"The agent that owns this skill.","isRequired":true,"uniqueKey":"data.agent_skills.items.[INDEX].agent_id","typeLabel":"string"},"name":{"type":"string","title":"Name","description":"The skill's name.","isRequired":true,"uniqueKey":"data.agent_skills.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","title":"Description","description":"What the skill is for, in a sentence.","isRequired":true,"uniqueKey":"data.agent_skills.items.[INDEX].description","typeLabel":"string"},"content":{"type":"string","title":"Content","description":"The skill itself — the reusable procedure, ready to put in a prompt.","isRequired":true,"uniqueKey":"data.agent_skills.items.[INDEX].content","typeLabel":"string"},"confidence":{"type":"number","title":"Confidence","description":"How much the distillation trusts this skill. Nominally 0.0–1.0, defaulting to 0.0 before anything scores it; the range is not enforced on the write path. Nothing in retrieval filters on it today, and how it divides labour with `maturity_score` is still open — so do not build a threshold on it yet.","isRequired":true,"uniqueKey":"data.agent_skills.items.[INDEX].confidence","typeLabel":"number"},"maturity_score":{"type":"number","title":"Maturity Score","description":"How well-established the skill is. Nominally 0.0–1.0 and unenforced, and — unlike the other two scores — its default is 0.6 rather than 0.0, chosen so an unscored skill starts mid-optimistic. The cost is that an unscored 0.6 is indistinguishable from a scored 0.6: there is no \"not evaluated\" sentinel, and maturity scoring is skipped by default. Filtering near 0.6 is therefore unreliable.","isRequired":true,"uniqueKey":"data.agent_skills.items.[INDEX].maturity_score","typeLabel":"number"},"score":{"type":"number","title":"Score","description":"Relevance of this skill to the query.","isRequired":true,"uniqueKey":"data.agent_skills.items.[INDEX].score","typeLabel":"number"},"source_case_ids":{"items":{"type":"string","uniqueKey":"data.agent_skills.items.[INDEX].source_case_ids.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Source Case Ids","description":"The agent cases this skill was distilled from. Fetch them for the underlying evidence.","uniqueKey":"data.agent_skills.items.[INDEX].source_case_ids","typeLabel":"string[]"},"created_at":{"oneOf":[{"type":"string","title":"Created At","description":"When the skill was first distilled.","format":"date-time","uniqueKey":"data.agent_skills.items.[INDEX].created_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Created At","description":"When the skill was first distilled.","uniqueKey":"data.agent_skills.items.[INDEX].created_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.agent_skills.items.[INDEX].created_at","typeLabel":"string\u003cdate-time> | null"},"updated_at":{"oneOf":[{"type":"string","title":"Updated At","description":"When it was last reinforced or rewritten.","format":"date-time","uniqueKey":"data.agent_skills.items.[INDEX].updated_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Updated At","description":"When it was last reinforced or rewritten.","uniqueKey":"data.agent_skills.items.[INDEX].updated_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.agent_skills.items.[INDEX].updated_at","typeLabel":"string\u003cdate-time> | null"}},"type":"object","required":["id","app_id","project_id","agent_id","name","description","content","confidence","maturity_score","score"],"title":"SearchAgentSkillItem","uniqueKey":"data.agent_skills.items.[INDEX]","typeLabel":"SearchAgentSkillItem · object"},"type":"array","title":"Agent Skills","description":"Matching agent skills, for an agent owner.","uniqueKey":"data.agent_skills","typeLabel":"SearchAgentSkillItem · object[]"},"unprocessed_messages":{"items":{"properties":{"id":{"type":"string","title":"Id","description":"Buffered-message id.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].id","typeLabel":"string"},"app_id":{"type":"string","title":"App Id","description":"The business-semantic scope the message was written under.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].app_id","typeLabel":"string"},"project_id":{"type":"string","title":"Project Id","description":"Second half of that scope.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].project_id","typeLabel":"string"},"session_id":{"type":"string","title":"Session Id","description":"The session the message is buffered under.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].session_id","typeLabel":"string"},"sender_id":{"type":"string","title":"Sender Id","description":"Who sent it.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].sender_id","typeLabel":"string"},"role":{"type":"string","enum":["user","assistant","tool"],"title":"Role","description":"\"user\", \"assistant\" or \"tool\", as submitted.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].role","typeLabel":"enum\u003cstring>"},"content":{"oneOf":[{"type":"string","title":"Content","description":"The message body as submitted.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.0","typeLabel":"string"},{"type":"array","items":{"properties":{"type":{"type":"string","enum":["text","audio","image","doc","pdf","html","email"],"title":"Type","description":"What this item is: \"text\", \"image\", \"audio\", \"doc\", \"pdf\", \"html\" or \"email\". It selects how the content is parsed, so it must match the payload.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"text":{"oneOf":[{"type":"string","title":"Text","description":"Inline text, used when `type` is \"text\".","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].text.oneOf.0","typeLabel":"string"},{"type":"null","title":"Text","description":"Inline text, used when `type` is \"text\".","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].text.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].text","typeLabel":"string | null"},"source":{"oneOf":[{"type":"string","title":"Source","description":"Where the item came from — an origin label carried through to the memory.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].source.oneOf.0","typeLabel":"string"},{"type":"null","title":"Source","description":"Where the item came from — an origin label carried through to the memory.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].source.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].source","typeLabel":"string | null"},"base64":{"oneOf":[{"type":"string","title":"Base64","description":"The item's bytes inline, base64-encoded. NOTE: a non-text item that carries only `base64` is skipped by the parse step — the parser reads bytes from object storage — so use `uri` for anything that must actually be understood.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].base64.oneOf.0","typeLabel":"string"},{"type":"null","title":"Base64","description":"The item's bytes inline, base64-encoded. NOTE: a non-text item that carries only `base64` is skipped by the parse step — the parser reads bytes from object storage — so use `uri` for anything that must actually be understood.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].base64.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].base64","typeLabel":"string | null"},"uri":{"oneOf":[{"type":"string","title":"Uri","description":"Pointer to already-uploaded bytes: the object key returned by POST /api/v2/object/sign. This is the only form of a non-text item that gets parsed.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].uri.oneOf.0","typeLabel":"string"},{"type":"null","title":"Uri","description":"Pointer to already-uploaded bytes: the object key returned by POST /api/v2/object/sign. This is the only form of a non-text item that gets parsed.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].uri.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].uri","typeLabel":"string | null"},"ext":{"oneOf":[{"type":"string","title":"Ext","description":"File extension of the referenced content, e.g. \"pdf\" — used when the uri carries none.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].ext.oneOf.0","typeLabel":"string"},{"type":"null","title":"Ext","description":"File extension of the referenced content, e.g. \"pdf\" — used when the uri carries none.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].ext.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].ext","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","title":"Name","description":"Original file name, kept for display and passed to the parser.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","description":"Original file name, kept for display and passed to the parser.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].name","typeLabel":"string | null"},"source_info":{"oneOf":[{"type":"object","title":"Source Info","description":"Free-form provenance metadata stored alongside the item; a `size` here is passed to the parser.","additionalProperties":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].source_info.oneOf.0","typeLabel":"Source Info · object"},{"type":"null","title":"Source Info","description":"Free-form provenance metadata stored alongside the item; a `size` here is passed to the parser.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].source_info.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].source_info","typeLabel":"Source Info · object | null"},"extras":{"oneOf":[{"type":"object","title":"Extras","description":"Free-form extra fields, passed through untouched.","additionalProperties":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].extras.oneOf.0","typeLabel":"Extras · object"},{"type":"null","title":"Extras","description":"Free-form extra fields, passed through untouched.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].extras.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX].extras","typeLabel":"Extras · object | null"}},"type":"object","required":["type"],"title":"ContentItem","description":"A single content element (appendix A). Current phase: only ``type=\"text\"``.","uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1.items.[INDEX]","typeLabel":"ContentItem · object"},"title":"Content","description":"The message body as submitted.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].content.oneOf.1","typeLabel":"ContentItem · object[]"}],"isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].content","typeLabel":"string | ContentItem · object[]"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"When the message was produced (ISO 8601).","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].timestamp","typeLabel":"string\u003cdate-time>"},"sender_name":{"oneOf":[{"type":"string","title":"Sender Name","description":"The sender's display name, when one was given.","uniqueKey":"data.unprocessed_messages.items.[INDEX].sender_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sender Name","description":"The sender's display name, when one was given.","uniqueKey":"data.unprocessed_messages.items.[INDEX].sender_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].sender_name","typeLabel":"string | null"},"tool_calls":{"oneOf":[{"type":"array","items":{"properties":{"id":{"type":"string","title":"Id","description":"Tool-call id; the matching \"tool\" message echoes it as `tool_call_id`.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_calls.oneOf.0.items.[INDEX].id","typeLabel":"string"},"function":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the function the assistant called.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_calls.oneOf.0.items.[INDEX].function.name","typeLabel":"string"},"arguments":{"type":"string","title":"Arguments","description":"The call's arguments as a JSON-encoded string (OpenAI shape), not an object.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_calls.oneOf.0.items.[INDEX].function.arguments","typeLabel":"string"}},"type":"object","required":["name","arguments"],"title":"ToolCallFunction","description":"The function invoked, with its arguments.","isRequired":true,"uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_calls.oneOf.0.items.[INDEX].function","typeLabel":"ToolCallFunction · object"},"type":{"type":"string","title":"Type","default":"function","description":"Tool-call kind. Always \"function\" today.","uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_calls.oneOf.0.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["id","function"],"title":"ToolCall","uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_calls.oneOf.0.items.[INDEX]","typeLabel":"ToolCall · object"},"title":"Tool Calls","description":"Tool calls on an assistant message, as submitted.","uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_calls.oneOf.0","typeLabel":"ToolCall · object[]"},{"type":"null","title":"Tool Calls","description":"Tool calls on an assistant message, as submitted.","uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_calls.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_calls","typeLabel":"ToolCall · object[] | null"},"tool_call_id":{"oneOf":[{"type":"string","title":"Tool Call Id","description":"The tool call this result answers, on a \"tool\" message.","uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_call_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Tool Call Id","description":"The tool call this result answers, on a \"tool\" message.","uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_call_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.unprocessed_messages.items.[INDEX].tool_call_id","typeLabel":"string | null"}},"type":"object","required":["id","app_id","project_id","session_id","sender_id","role","content","timestamp"],"title":"UnprocessedMessageDTO","description":"Buffered raw message not yet extracted (no owner — inference happens after\nboundary detection). Returned by /search only when ``filters.session_id`` is a\ntop-level eq scalar (spec §4 / appendix E).","uniqueKey":"data.unprocessed_messages.items.[INDEX]","typeLabel":"UnprocessedMessageDTO · object"},"type":"array","title":"Unprocessed Messages","description":"Raw buffered messages not yet extracted. Returned only when the request filtered on a single `session_id`, so a caller can see what is still in flight.","uniqueKey":"data.unprocessed_messages","typeLabel":"UnprocessedMessageDTO · object[]"}},"type":"object","title":"SearchData","description":"Endpoint-defined business result","isRequired":true,"uniqueKey":"data","typeLabel":"SearchData · object"}},"type":"object","required":["request_id","data"],"title":"SuccessEnvelope[SearchData]","uniqueKey":"","typeLabel":"SuccessEnvelope[SearchData] · object"},"examples":{"Example":{"title":"Example","value":{"request_id":"\u003cstring>","data":{"episodes":[{"id":"\u003cstring>","app_id":"\u003cstring>","project_id":"\u003cstring>","timestamp":"2023-11-07T05:31:56Z","summary":"\u003cstring>","subject":"\u003cstring>","episode":"\u003cstring>","type":"\u003cstring>","score":123,"user_id":"\u003cstring>","session_id":"\u003cstring>","sender_ids":["\u003cstring>"],"atomic_facts":[{"id":"\u003cstring>","content":"\u003cstring>","score":123}],"tags":["\u003cstring>"],"edited_at":"2023-11-07T05:31:56Z","reflect_state":"pending","cited":false}],"profiles":[{"id":"\u003cstring>","app_id":"\u003cstring>","project_id":"\u003cstring>","user_id":"\u003cstring>","profile_data":{},"created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","score":123}],"agent_cases":[{"id":"\u003cstring>","app_id":"\u003cstring>","project_id":"\u003cstring>","agent_id":"\u003cstring>","session_id":"\u003cstring>","task_intent":"\u003cstring>","approach":"\u003cstring>","quality_score":123,"timestamp":"2023-11-07T05:31:56Z","score":123,"key_insight":"\u003cstring>"}],"agent_skills":[{"id":"\u003cstring>","app_id":"\u003cstring>","project_id":"\u003cstring>","agent_id":"\u003cstring>","name":"\u003cstring>","description":"\u003cstring>","content":"\u003cstring>","confidence":123,"maturity_score":123,"score":123,"source_case_ids":["\u003cstring>"],"created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z"}],"unprocessed_messages":[{"id":"\u003cstring>","app_id":"\u003cstring>","project_id":"\u003cstring>","session_id":"\u003cstring>","sender_id":"\u003cstring>","role":"user","content":"\u003cstring>","timestamp":"2023-11-07T05:31:56Z","sender_name":"\u003cstring>","tool_calls":[{"id":"\u003cstring>","function":{"name":"\u003cstring>","arguments":"\u003cstring>"},"type":"function"}],"tool_call_id":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"d56d2fe8-ef12-4188-a8dc-ff80e5973095":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"Gateway error body. NOTE: shape is not yet uniform across auth/quota/ rate-limit paths — treat fields as best-effort. Commonly includes a `code`/`message` (flat) or an `error` object/string with a `message`.","title":"GatewayError","uniqueKey":"","typeLabel":"GatewayError · object"},"examples":{"Example":{"title":"Example","value":{}}},"exampleType":"generated"}},"exampleType":"generated"},"787b7b1a-ea3d-426b-8be7-1dda2c3950aa":{"description":"Authenticated but not permitted — either rejected by the auth service, or the account's memory API version does not match the interface version implied by the path (a v1 account calling an /api/v2 route).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"Gateway error body. NOTE: shape is not yet uniform across auth/quota/ rate-limit paths — treat fields as best-effort. Commonly includes a `code`/`message` (flat) or an `error` object/string with a `message`.","title":"GatewayError","uniqueKey":"","typeLabel":"GatewayError · object"},"examples":{"Example":{"title":"Example","value":{}}},"exampleType":"generated"}},"exampleType":"generated"},"b358ed5f-7733-4f0a-ae8c-593f0ff4d9f1":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"type":"array","title":"Location","description":"Path to the offending field, from the body root.","isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Message","description":"What is wrong with it.","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Error Type","description":"Machine-readable validation-error kind.","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError","uniqueKey":"detail.items.[INDEX]","typeLabel":"ValidationError · object"},"type":"array","title":"Detail","description":"One entry per field that failed validation.","uniqueKey":"detail","typeLabel":"ValidationError · object[]"}},"type":"object","title":"HTTPValidationError","uniqueKey":"","typeLabel":"HTTPValidationError · object"},"examples":{"Example":{"title":"Example","value":{"detail":[{"loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"5120833f-f1f0-4f8a-b795-5b3dca25f086":{"description":"Rate limit or quota exceeded.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"Gateway error body. NOTE: shape is not yet uniform across auth/quota/ rate-limit paths — treat fields as best-effort. Commonly includes a `code`/`message` (flat) or an `error` object/string with a `message`.","title":"GatewayError","uniqueKey":"","typeLabel":"GatewayError · object"},"examples":{"Example":{"title":"Example","value":{}}},"exampleType":"generated"}},"exampleType":"generated"},"da5c29bb-fa40-49a4-927d-a6d36a59f08a":{"description":"The gateway could not reach the authentication service. Transient — retry with backoff.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"Gateway error body. NOTE: shape is not yet uniform across auth/quota/ rate-limit paths — treat fields as best-effort. Commonly includes a `code`/`message` (flat) or an `error` object/string with a `message`.","title":"GatewayError","uniqueKey":"","typeLabel":"GatewayError · object"},"examples":{"Example":{"title":"Example","value":{}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"903c48f7-e2df-45e0-bf1e-f020d6c26b61":{"BearerAuth":{"type":"http","scheme":"bearer","description":"API key issued by EverOS, sent as `Authorization: Bearer \u003capi_key>`.","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"6755bf3f-8ce6-4610-8f69-e9440a578770":{"url":"https://api.evermind.ai","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key issued by EverOS, sent as `Authorization: Bearer \u003capi_key>`.","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key issued by EverOS, sent as `Authorization: Bearer \u003capi_key>`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"evermind","siteName":"EverOS","title":"Context Retrieval [Cloud-only] - EverOS","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T03:27:45.744Z","originalFileLocation":"api-reference/memory/context-retrieval-[cloud-only].mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Retrieve memories with a multi-round, LLM-driven search loop. An LLM plans and runs several searches over the owner\u0026#x27;s memories (keyword, semantic, hybrid, topic cluster, and reading the surrounding conversation or a whole session), looks at what came back, and searches again with new queries until it judges the evidence sufficient to answer query. The episodes it found are returned. The response contains memories, not an answer: the model\u0026#x27;s own answer is discarded. Use it for questions a single search answers poorly: multi-hop, temporal, or spread across several conversations. For simple lookups, /api/v2/memory/search is faster and cheaper. Request: the same body as /api/v2/memory/search, except that method is fixed to \u0026quot;context\u0026quot; (any other value is a 422) and min_score is not supported (422). Response: the same SearchData shape as /api/v2/memory/search. - Episodes come back for a user_id owner only. For an agent_id owner, episodes, agent_cases and agent_skills are empty. - profiles (with include_profile) and unprocessed_messages (with a top-level session_id filter) are filled exactly as on search. - episodes[].cited is true for the episodes the model named as the ones its answer rested on. - episodes[].score is a rank-fusion score, roughly 0.01 to 0.05, plus 1.0 for a cited episode. It is not comparable with search scores. Limits: by default at most 5 LLM rounds and 45 seconds per request. Reaching a limit is not an error: the episodes found so far are returned. Set your client timeout to at least 60 seconds.\">\u003cmeta data-mint-head name=\"application-name\" content=\"EverOS\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/evermind/9Y2uP5IsfgMDaKTY/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/evermind/9Y2uP5IsfgMDaKTY/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/evermind/9Y2uP5IsfgMDaKTY/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/evermind/9Y2uP5IsfgMDaKTY/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/evermind/9Y2uP5IsfgMDaKTY/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/evermind/9Y2uP5IsfgMDaKTY/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/evermind/9Y2uP5IsfgMDaKTY/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/evermind/9Y2uP5IsfgMDaKTY/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/evermind/9Y2uP5IsfgMDaKTY/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Context Retrieval [Cloud-only] - EverOS\">\u003cmeta data-mint-head property=\"og:description\" content=\"Retrieve memories with a multi-round, LLM-driven search loop. An LLM plans and runs several searches over the owner\u0026#x27;s memories (keyword, semantic, hybrid, topic cluster, and reading the surrounding conversation or a whole session), looks at what came back, and searches again with new queries until it judges the evidence sufficient to answer query. The episodes it found are returned. The response contains memories, not an answer: the model\u0026#x27;s own answer is discarded. Use it for questions a single search answers poorly: multi-hop, temporal, or spread across several conversations. For simple lookups, /api/v2/memory/search is faster and cheaper. Request: the same body as /api/v2/memory/search, except that method is fixed to \u0026quot;context\u0026quot; (any other value is a 422) and min_score is not supported (422). Response: the same SearchData shape as /api/v2/memory/search. - Episodes come back for a user_id owner only. For an agent_id owner, episodes, agent_cases and agent_skills are empty. - profiles (with include_profile) and unprocessed_messages (with a top-level session_id filter) are filled exactly as on search. - episodes[].cited is true for the episodes the model named as the ones its answer rested on. - episodes[].score is a rank-fusion score, roughly 0.01 to 0.05, plus 1.0 for a cited episode. It is not comparable with search scores. Limits: by default at most 5 LLM rounds and 45 seconds per request. Reaching a limit is not an error: the episodes found so far are returned. Set your client timeout to at least 60 seconds.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"EverOS\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.evermind.ai/api-reference/memory/context-retrieval-[cloud-only]\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://evermind.mintlify.app/_mintlify/api/og/v2?division=Memory\u0026amp;title=Context+Retrieval+%5BCloud-only%5D\u0026amp;description=Retrieve+memories+with+a+multi-round%2C+LLM-driven+search+loop.%0A%0AAn+LLM+plans+and+runs+several+searches+over+the+owner%27s+memories+%28keyword%2C+semantic%2C+hybrid%2C+topi\u0026amp;theme=542fb84329606931cb1a7e2a\u0026amp;signature=70827fc301bb55eef74140432b07162813b91412e66ba1b77d1b1c42467b414f\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Context Retrieval [Cloud-only] - EverOS\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Retrieve memories with a multi-round, LLM-driven search loop. An LLM plans and runs several searches over the owner\u0026#x27;s memories (keyword, semantic, hybrid, topic cluster, and reading the surrounding conversation or a whole session), looks at what came back, and searches again with new queries until it judges the evidence sufficient to answer query. The episodes it found are returned. The response contains memories, not an answer: the model\u0026#x27;s own answer is discarded. Use it for questions a single search answers poorly: multi-hop, temporal, or spread across several conversations. For simple lookups, /api/v2/memory/search is faster and cheaper. Request: the same body as /api/v2/memory/search, except that method is fixed to \u0026quot;context\u0026quot; (any other value is a 422) and min_score is not supported (422). Response: the same SearchData shape as /api/v2/memory/search. - Episodes come back for a user_id owner only. For an agent_id owner, episodes, agent_cases and agent_skills are empty. - profiles (with include_profile) and unprocessed_messages (with a top-level session_id filter) are filled exactly as on search. - episodes[].cited is true for the episodes the model named as the ones its answer rested on. - episodes[].score is a rank-fusion score, roughly 0.01 to 0.05, plus 1.0 for a cited episode. It is not comparable with search scores. Limits: by default at most 5 LLM rounds and 45 seconds per request. Reaching a limit is not an error: the episodes found so far are returned. Set your client timeout to at least 60 seconds.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://evermind.mintlify.app/_mintlify/api/og/v2?division=Memory\u0026amp;title=Context+Retrieval+%5BCloud-only%5D\u0026amp;description=Retrieve+memories+with+a+multi-round%2C+LLM-driven+search+loop.%0A%0AAn+LLM+plans+and+runs+several+searches+over+the+owner%27s+memories+%28keyword%2C+semantic%2C+hybrid%2C+topi\u0026amp;theme=542fb84329606931cb1a7e2a\u0026amp;signature=70827fc301bb55eef74140432b07162813b91412e66ba1b77d1b1c42467b414f\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/evermind/9Y2uP5IsfgMDaKTY/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"EverOS\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2DABC2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.evermind.ai/api-reference/memory/context-retrieval-[cloud-only]\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/memory/context-retrieval-%5Bcloud-only%5D.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.evermind.ai/#organization\",\"name\":\"EverOS\",\"url\":\"https://docs.evermind.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/evermind/r7FUvGqFENzWPpQK/logo/dark.png?fit=max\u0026auto=format\u0026n=r7FUvGqFENzWPpQK\u0026q=85\u0026s=3c77717d85a2e6597b61a703fa9f18dc\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.evermind.ai#website\",\"name\":\"EverOS\",\"url\":\"https://docs.evermind.ai\",\"publisher\":{\"@id\":\"https://docs.evermind.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.evermind.ai/api-reference/memory/context-retrieval-[cloud-only]#webpage\",\"url\":\"https://docs.evermind.ai/api-reference/memory/context-retrieval-[cloud-only]\",\"name\":\"Context Retrieval [Cloud-only]\",\"description\":\"Retrieve memories with a multi-round, LLM-driven search loop. An LLM plans and runs several searches over the owner's memories (keyword, semantic, hybrid, topic cluster, and reading the surrounding conversation or a whole session), looks at what came back, and searches again with new queries until it judges the evidence sufficient to answer query. The episodes it found are returned. The response contains memories, not an answer: the model's own answer is discarded. Use it for questions a single search answers poorly: multi-hop, temporal, or spread across several conversations. For simple lookups, /api/v2/memory/search is faster and cheaper. Request: the same body as /api/v2/memory/search, except that method is fixed to \\\"context\\\" (any other value is a 422) and min_score is not supported (422). Response: the same SearchData shape as /api/v2/memory/search. - Episodes come back for a user_id owner only. For an agent_id owner, episodes, agent_cases and agent_skills are empty. - profiles (with include_profile) and unprocessed_messages (with a top-level session_id filter) are filled exactly as on search. - episodes[].cited is true for the episodes the model named as the ones its answer rested on. - episodes[].score is a rank-fusion score, roughly 0.01 to 0.05, plus 1.0 for a cited episode. It is not comparable with search scores. Limits: by default at most 5 LLM rounds and 45 seconds per request. Reaching a limit is not an error: the episodes found so far are returned. Set your client timeout to at least 60 seconds.\",\"dateModified\":\"2026-10-26T03:27:45.744Z\",\"isPartOf\":{\"@id\":\"https://docs.evermind.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.evermind.ai/api-reference/memory/context-retrieval-[cloud-only]#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.evermind.ai/api-reference/memory/context-retrieval-[cloud-only]#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Memory\",\"item\":\"https://docs.evermind.ai/api-reference/memory/add-messages-[oss-+-cloud]\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Context Retrieval [Cloud-only]\",\"item\":\"https://docs.evermind.ai/api-reference/memory/context-retrieval-[cloud-only]\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.evermind.ai/api-reference/memory/context-retrieval-[cloud-only]#apireference\",\"headline\":\"Context Retrieval [Cloud-only]\",\"name\":\"Context Retrieval [Cloud-only]\",\"description\":\"Retrieve memories with a multi-round, LLM-driven search loop. An LLM plans and runs several searches over the owner's memories (keyword, semantic, hybrid, topic cluster, and reading the surrounding conversation or a whole session), looks at what came back, and searches again with new queries until it judges the evidence sufficient to answer query. The episodes it found are returned. The response contains memories, not an answer: the model's own answer is discarded. Use it for questions a single search answers poorly: multi-hop, temporal, or spread across several conversations. For simple lookups, /api/v2/memory/search is faster and cheaper. Request: the same body as /api/v2/memory/search, except that method is fixed to \\\"context\\\" (any other value is a 422) and min_score is not supported (422). Response: the same SearchData shape as /api/v2/memory/search. - Episodes come back for a user_id owner only. For an agent_id owner, episodes, agent_cases and agent_skills are empty. - profiles (with include_profile) and unprocessed_messages (with a top-level session_id filter) are filled exactly as on search. - episodes[].cited is true for the episodes the model named as the ones its answer rested on. - episodes[].score is a rank-fusion score, roughly 0.01 to 0.05, plus 1.0 for a cited episode. It is not comparable with search scores. Limits: by default at most 5 LLM rounds and 45 seconds per request. Reaching a limit is not an error: the episodes found so far are returned. Set your client timeout to at least 60 seconds.\",\"url\":\"https://docs.evermind.ai/api-reference/memory/context-retrieval-[cloud-only]\",\"mainEntityOfPage\":{\"@id\":\"https://docs.evermind.ai/api-reference/memory/context-retrieval-[cloud-only]#webpage\"},\"dateModified\":\"2026-10-26T03:27:45.744Z\",\"publisher\":{\"@id\":\"https://docs.evermind.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.evermind.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"EverOS\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"EverOS","nav":{"global":{},"tabs":[{"tab":"Welcome","pages":[{"title":"Welcome","href":"/introduction"}]},{"tab":"EverOS Cloud","pages":[{"title":"EverOS Cloud","href":"/cloud/overview"}]},{"tab":"Open Source","pages":[{"title":"Open Source","href":"/open-source/overview"}]},{"tab":"Cookbook","pages":[{"title":"Cookbook","href":"/cookbook/quickstart"}]},{"tab":"API Reference","groups":[{"group":"Getting Started","icon":"rocket","pages":[{"title":"API Overview","icon":"circle-info","href":"/api-reference/introduction"}]},{"group":"Migration","icon":"arrow-up-right-dots","pages":[{"title":"v1 API Retirement","icon":"calendar-xmark","href":"/api-reference/v1-sunset"},{"title":"Upgrade Python SDK to 1.x","icon":"arrow-up-right-dots","href":"/api-reference/sdk-migration-1x"}]},{"group":"Memory","icon":"database","pages":[{"title":"Add messages [OSS + Cloud]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/add","href":"/api-reference/memory/add-messages-[oss-+-cloud]"},{"title":"Force memory extraction [OSS + Cloud]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/flush","href":"/api-reference/memory/force-memory-extraction-[oss-+-cloud]"},{"title":"Get memories [OSS + Cloud]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/get","href":"/api-reference/memory/get-memories-[oss-+-cloud]"},{"title":"Search memories [OSS + Cloud]","description":"Retrieve the memories relevant to a query.\n\nExactly one of `user_id` / `agent_id` is required, and it decides what comes back: a user owner returns episodes (plus profiles with `include_profile`), an agent owner returns agent cases and skills. All result collections are always present in the response, empty when they do not apply.\n\nThe vector-backed methods read an index that lags extraction by seconds — to read back something just extracted, use /api/v2/memory/get.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/search","href":"/api-reference/memory/search-memories-[oss-+-cloud]"},{"title":"Context Retrieval [Cloud-only]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/context","href":"/api-reference/memory/context-retrieval-[cloud-only]"},{"title":"Edit profile items [Cloud-only]","description":"Apply 1–50 edits to one user's profile in a single call.\n\nEach operation carries an `action` (add, update or delete), a `type` (explicit_info or implicit_traits), the item `data`, and an optional `reason`.\n\nProfile is the only memory type this endpoint edits — `memory_type` is pinned to \"profile\"; every other type is produced by extraction. Operations are reported individually in the response, so some can be rejected while others apply.\n\nTo change an episode's narrative, summary or subject, use /api/v2/memory/update instead.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/edit","href":"/api-reference/memory/edit-profile-items-[cloud-only]"},{"title":"Edit one memory record [Cloud-only]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/update","href":"/api-reference/memory/edit-one-memory-record-[cloud-only]"},{"title":"Delete memories [Cloud-only]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/delete","href":"/api-reference/memory/delete-memories-[cloud-only]"},{"title":"Soft-delete memory records by id [Cloud-only]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/delete_by_ids","href":"/api-reference/memory/soft-delete-memory-records-by-id-[cloud-only]"},{"title":"Submit feedback about one memory [Cloud-only]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/feedback","href":"/api-reference/memory/submit-feedback-about-one-memory-[cloud-only]"},{"group":"Tags","icon":"tags","pages":[{"title":"Bind tags to memories [Cloud]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/tag/bind","href":"/api-reference/memory/bind-tags-to-memories-[cloud]"},{"title":"Unbind tags from memories [Cloud]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/tag/unbind","href":"/api-reference/memory/unbind-tags-from-memories-[cloud]"},{"title":"Replace tags on memories [Cloud]","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/memory/tag/replace","href":"/api-reference/memory/replace-tags-on-memories-[cloud]"}]}]},{"group":"Knowledge Bases","icon":"book","pages":[{"title":"Create a knowledge base","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/knowledge_bases","href":"/api-reference/knowledge/create-a-knowledge-base"},{"title":"List knowledge bases","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v2/knowledge_bases","href":"/api-reference/knowledge/list-knowledge-bases"},{"title":"Get a knowledge base","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v2/knowledge_bases/{kb_id}","href":"/api-reference/knowledge/get-a-knowledge-base"},{"title":"Update a knowledge base","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/v2/knowledge_bases/{kb_id}","href":"/api-reference/knowledge/update-a-knowledge-base"},{"title":"Delete a knowledge base","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /api/v2/knowledge_bases/{kb_id}","href":"/api-reference/knowledge/delete-a-knowledge-base"},{"title":"Search a knowledge base","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/knowledge_bases/{kb_id}/search","href":"/api-reference/knowledge/search-a-knowledge-base"},{"group":"Documents","icon":"file-lines","pages":[{"title":"Upload a document","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/knowledge_bases/{kb_id}/documents","href":"/api-reference/knowledge/upload-a-document"},{"title":"List Documents","deprecated":null,"version":null,"openapi":"/api-reference/openapi-oss-v1.json get /api/v1/knowledge/documents","href":"/api-reference/knowledge/list-documents"},{"title":"Get a document","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v2/knowledge_bases/{kb_id}/documents/{doc_id}","href":"/api-reference/knowledge/get-a-document"},{"title":"Replace a document","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /api/v2/knowledge_bases/{kb_id}/documents/{doc_id}","href":"/api-reference/knowledge/replace-a-document"},{"title":"Update a document","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/v2/knowledge_bases/{kb_id}/documents/{doc_id}","href":"/api-reference/knowledge/update-a-document"},{"title":"Delete a document","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /api/v2/knowledge_bases/{kb_id}/documents/{doc_id}","href":"/api-reference/knowledge/delete-a-document"}]},{"group":"Categories","icon":"folder-tree","pages":[{"title":"Create a category","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/knowledge_bases/{kb_id}/categories","href":"/api-reference/knowledge/create-a-category"},{"title":"List Categories","deprecated":null,"version":null,"openapi":"/api-reference/openapi-oss-v1.json get /api/v1/knowledge/categories","href":"/api-reference/knowledge/list-categories"},{"title":"Update a category","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/v2/knowledge_bases/{kb_id}/categories/{category_id}","href":"/api-reference/knowledge/update-a-category"},{"title":"Delete a category","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /api/v2/knowledge_bases/{kb_id}/categories/{category_id}","href":"/api-reference/knowledge/delete-a-category"}]},{"group":"Topics","icon":"sitemap","pages":[{"title":"List a document's topics","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v2/knowledge_bases/{kb_id}/documents/{doc_id}/topics","href":"/api-reference/knowledge/list-a-documents-topics"},{"title":"Get a topic","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v2/knowledge_bases/{kb_id}/documents/{doc_id}/topics/{topic_id}","href":"/api-reference/knowledge/get-a-topic"},{"title":"List topics by tag","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v2/knowledge_bases/{kb_id}/topics","href":"/api-reference/knowledge/list-topics-by-tag"}]},{"group":"Semantic Tags","icon":"tag","pages":[{"title":"Count tag usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/knowledge_bases/{kb_id}/tags","href":"/api-reference/knowledge/count-tag-usage"},{"title":"Replace a topic's tags","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/knowledge_bases/{kb_id}/documents/{doc_id}/topics/{topic_id}/tag/replace","href":"/api-reference/knowledge/replace-a-topics-tags"}]}]},{"group":"Async Tasks","icon":"list-check","pages":[{"title":"List tasks","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v2/tasks","href":"/api-reference/tasks/list-tasks"},{"title":"Count tasks by status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v2/tasks/stats","href":"/api-reference/tasks/count-tasks-by-status"},{"title":"Get a task","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v2/tasks/{task_id}","href":"/api-reference/tasks/get-a-task"}]},{"group":"Storage","icon":"cloud-arrow-up","pages":[{"title":"Get multimodal upload URLs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v2/object/sign","href":"/api-reference/storage/get-multimodal-upload-urls"}]}]},{"tab":"API Reference (Cloud v1 · legacy)","pages":[{"title":"API Reference (Cloud v1 · legacy)","href":"/api-reference/legacy-cloud-v1"}]},{"tab":"API Reference (OSS v1 · legacy)","pages":[{"title":"API Reference (OSS v1 · legacy)","href":"/api-reference/legacy-oss-v1"}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/changelog/release-notes"}]}]},"title":"Context Retrieval [Cloud-only] - EverOS","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-Og7hgu7u.js","dist-BaREnp3o.js","lib--scc4DXi.js","lib-B8HbPgcC.js","clsx-CefdjKz2.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-DKJwRUt2.js","utils-CWD_VS3u.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-oFjciODD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C76WsxC3.js","snippetPresets-DvPMxpX_.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CuNQfndH.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BVFpVUoF.js","shallow-t59Jg5Kr.js","getApiPlaygroundDisplay-C_JZ4amX.js","CodeSnippet-CLRDnx_h.js","CodeSnippets-C2myU4kc.js","Page-7TwLLapg.js","getPastedJson-B-JaVXw7.js","icon-BA-iDhH3.js","MethodPill-D4qZABFp.js","DuplicateIcon-THIDKO1O.js","createIcon-CYYJwgFd.js","DynamicMarkdown-UGQuxDKp.js","SectionHeading-jYELb23h.js","axios-vUo_bRtp.js","Markdown-DKsLa3wy.js","AssistantPageLink-sgx_0XzF.js"]}